package com.yiidata.rpc.rmi;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

/**
 * <pre>
 *
 * Created by zhenqin.
 * User: zhenqin
 * Date: 2018/1/6
 * Time: 12:30
 * Verdor: NowledgeData
 * To change this template use File | Settings | File Templates.
 *
 * </pre>
 *
 * @author zhenqin
 */
public class RMIHelloWorldServer extends UnicastRemoteObject implements RMIHelloWorldProtocol {


    public RMIHelloWorldServer() throws RemoteException {
    }

    @Override
    public String sayHello(String name) throws RemoteException {
        System.out.println("exec rmi rpc, hello, " + name);
        return "hi, " + name;
    }

    public static void main(String[] args) throws Exception {
        LocateRegistry.createRegistry(8088);
        try {

            RMIHelloWorldProtocol h = new RMIHelloWorldServer();

            //创建并导出接受指定port请求的本地主机上的Registry实例。
            //LocateRegistry.createRegistry(12312);

            /*
             *  Naming 类提供在对象注册表中存储和获得远程对远程对象引用的方法
             *  Naming 类的每个方法都可将某个名称作为其一个参数，
             *  该名称是使用以下形式的 URL 格式（没有 scheme 组件）的 java.lang.String:
             *  //host:port/name
             *  host：注册表所在的主机（远程或本地)，省略则默认为本地主机
             *  port：是注册表接受调用的端口号，省略则默认为1099，RMI注册表registry使用的著名端口
             *  name：是未经注册表解释的简单字符串
             */
            //Naming.bind("//host:port/name", h);
            Naming.bind("rmi://0.0.0.0:8088/hello", h);
            System.out.println("RMI HelloServer 启动成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
